﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Dominio
{
    [DataContract]
    public class Buzon : OPersistente
    {
        public static readonly string Entrada = "Entrada";
        public static readonly string Salida = "Salida";

        private List<ObjetoBuzon> objetosBuzon;

        [DataMember]
        public List<ObjetoBuzon> ObjetosBuzon
        {
            get { return objetosBuzon; }
            set { objetosBuzon = value; }
        }

        private String tipo;

        [DataMember]
        public String Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }

        private Buzon (String tipo) 
        {
            if(tipo.Equals(Entrada)){
                this.tipo = Entrada;
            }
            if(tipo.Equals(Salida)){
                this.tipo = Salida;
            }
            objetosBuzon = new List<ObjetoBuzon>();                
        }

        public static Buzon CreateBuzonEntrada()
        {
            return new Buzon(Entrada);
        }

        public static Buzon CreateBuzonSalida()
        {
            return new Buzon(Salida);
        }

        //Recibe la regla con los filtros seteados
        internal void AplicarRegla(List<object> parametros)
        {
            throw new NotImplementedException();
        }

        //Recibe el la carpeta hija
        internal void CrearCarpeta(Carpeta carpetaHija)
        {
            carpetaHija.Agregarse();
            ObjetosBuzon.Add(carpetaHija);
            this.Modificarse();
        }

        //Recibe el nombre de la carpeta
        internal void EliminarCarpeta(Carpeta carpetaHija)
        {
            ObjetosBuzon.Remove(carpetaHija);
            this.Modificarse();
        }

        //Recibe el oid del mensaje
        internal void EliminarMensaje(Mensaje mensaje)
        {
            ObjetosBuzon.Remove(mensaje);
            this.Modificarse();
        }
    }
}
